@@ -33,6 +33,8 @@ urlpatterns += [ |
||
| 33 | 33 |
url(r'^l/wx/authorize$', lensman_views.lensman_wx_authorize_api, name='lensman_wx_authorize_api'), # 微信用户授权 |
| 34 | 34 |
|
| 35 | 35 |
url(r'^l/upload$', lensman_views.lensman_photo_upload_api, name='lensman_photo_upload_api'), # 摄影师照片上传 |
| 36 |
+ |
|
| 37 |
+ url(r'^l/brief$', lensman_views.lensman_brief_api, name='lensman_brief_api'), # 摄影师简报 |
|
| 36 | 38 |
] |
| 37 | 39 |
|
| 38 | 40 |
# 群组相关 |
@@ -14,11 +14,15 @@ from TimeConvert import TimeConvert as tc |
||
| 14 | 14 |
|
| 15 | 15 |
from account.models import LensmanInfo, UserInfo |
| 16 | 16 |
from group.models import GroupInfo, GroupPhotoInfo, GroupUserInfo |
| 17 |
+from message.models import SystemMessageInfo |
|
| 18 |
+from pay.models import OrderInfo |
|
| 17 | 19 |
from photo.models import PhotosInfo |
| 18 | 20 |
from utils.error.errno_utils import LensmanStatusCode, UserStatusCode |
| 19 | 21 |
from utils.error.response_utils import response |
| 22 |
+from utils.message_utils import system_messages |
|
| 23 |
+from utils.page_utils import pagination |
|
| 20 | 24 |
from utils.redis.rgroup import get_group_info, get_group_users_info, set_group_info, set_group_users_info |
| 21 |
-from utils.redis.rkeys import GROUP_LAST_PHOTO_PK |
|
| 25 |
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK, TODAY_INCOME, TODAY_UPLOAD_PHOTO_AMOUNT |
|
| 22 | 26 |
from utils.thumbnail_utils import make_thumbnail |
| 23 | 27 |
from utils.watermark_utils import watermark_wrap |
| 24 | 28 |
|
@@ -243,6 +247,9 @@ def lensman_photo_upload_api(request): |
||
| 243 | 247 |
# 设置群组最后一张照片PK |
| 244 | 248 |
r.set(GROUP_LAST_PHOTO_PK % group_id, group_photo.pk) |
| 245 | 249 |
|
| 250 |
+ # 更新今日上传照片数量 |
|
| 251 |
+ r.incr(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, tc.local_string(format='%Y%m%d'))) |
|
| 252 |
+ |
|
| 246 | 253 |
# 获取从 current_id 到 now 的群组照片列表 |
| 247 | 254 |
# group_photos = GroupPhotoInfo.objects.filter( |
| 248 | 255 |
# group_id=group_id, |
@@ -258,3 +265,35 @@ def lensman_photo_upload_api(request): |
||
| 258 | 265 |
# 'current_id': latest_photo and latest_photo.pk or current_id, |
| 259 | 266 |
# 'photos': [photo.photo_info(user_id) for photo in group_photos], |
| 260 | 267 |
}) |
| 268 |
+ |
|
| 269 |
+ |
|
| 270 |
+@logit |
|
| 271 |
+def lensman_brief_api(request): |
|
| 272 |
+ user_id = request.POST.get('user_id', '')
|
|
| 273 |
+ |
|
| 274 |
+ ymd = tc.local_string(format='%Y%m%d') |
|
| 275 |
+ |
|
| 276 |
+ today_income = int(r.get(TODAY_INCOME % (user_id, ymd)) or 0) |
|
| 277 |
+ today_upload = int(r.get(TODAY_UPLOAD_PHOTO_AMOUNT % (user_id, ymd)) or 0) |
|
| 278 |
+ |
|
| 279 |
+ # 摄影师端系统消息 |
|
| 280 |
+ systems = system_messages(user_id, SystemMessageInfo.PAIAI_LENSMAN) |
|
| 281 |
+ systems, left = pagination(systems, 1, 10) |
|
| 282 |
+ systems = [msg.msg_info(user_id) for msg in systems] |
|
| 283 |
+ |
|
| 284 |
+ # 照片购买记录 |
|
| 285 |
+ orders = OrderInfo.objects.filter(to_uid=user_id, pay_status=OrderInfo.PAID, status=True).order_by('-pk')
|
|
| 286 |
+ orders, left = pagination(orders, 1, 10) |
|
| 287 |
+ orders = [order.data(user_id) for order in orders] |
|
| 288 |
+ |
|
| 289 |
+ data = {
|
|
| 290 |
+ 'today_income': today_income, |
|
| 291 |
+ 'today_upload': today_upload, |
|
| 292 |
+ 'avg_income': int(today_income / (today_upload + 1)), |
|
| 293 |
+ 'messages': {
|
|
| 294 |
+ 'system': systems, |
|
| 295 |
+ 'orders': orders, |
|
| 296 |
+ } |
|
| 297 |
+ } |
|
| 298 |
+ |
|
| 299 |
+ return response(200, 'Get Lensman Brief Success', u'获取摄影师简报成功', data) |
@@ -7,9 +7,9 @@ from account.models import UserInfo |
||
| 7 | 7 |
from message.models import SystemMessageDeleteInfo, SystemMessageInfo, SystemMessageReadInfo, UserMessageInfo |
| 8 | 8 |
from utils.error.errno_utils import MessageStatusCode, UserStatusCode |
| 9 | 9 |
from utils.error.response_utils import response |
| 10 |
+from utils.message_utils import system_messages, system_unread_messages |
|
| 10 | 11 |
from utils.page_utils import pagination |
| 11 |
-from utils.redis.rmessage import (get_system_message_delete_info, get_system_message_read_info, |
|
| 12 |
- set_system_message_delete_info, set_system_message_read_info) |
|
| 12 |
+from utils.redis.rmessage import set_system_message_delete_info, set_system_message_read_info |
|
| 13 | 13 |
|
| 14 | 14 |
|
| 15 | 15 |
@logit |
@@ -27,14 +27,7 @@ def message_list_api(request): |
||
| 27 | 27 |
for message in messages: |
| 28 | 28 |
msg_type = message['msg_type'] |
| 29 | 29 |
if msg_type == UserMessageInfo.SYSTEM: |
| 30 |
- read_message_ids = get_system_message_read_info(user_id) |
|
| 31 |
- deleted_message_ids = get_system_message_delete_info(user_id) |
|
| 32 |
- type_unread_messages = SystemMessageInfo.objects.filter( |
|
| 33 |
- src=SystemMessageInfo.PAIAI_USER, |
|
| 34 |
- status=True, |
|
| 35 |
- ).exclude( |
|
| 36 |
- pk__in=list(set(read_message_ids + deleted_message_ids)), |
|
| 37 |
- ) |
|
| 30 |
+ type_unread_messages = system_unread_messages(user_id, SystemMessageInfo.PAIAI_USER) |
|
| 38 | 31 |
else: |
| 39 | 32 |
type_unread_messages = UserMessageInfo.objects.filter( |
| 40 | 33 |
to_uid=user_id, |
@@ -63,13 +56,7 @@ def message_type_list_api(request, msg_type): |
||
| 63 | 56 |
num = int(request.POST.get('num', 0) or request.GET.get('num', 0) or settings.MESSAGE_NUM_PER_PAGE)
|
| 64 | 57 |
|
| 65 | 58 |
if msg_type == UserMessageInfo.SYSTEM: |
| 66 |
- deleted_message_ids = get_system_message_delete_info(user_id) |
|
| 67 |
- type_messages = SystemMessageInfo.objects.filter( |
|
| 68 |
- src=SystemMessageInfo.PAIAI_USER, |
|
| 69 |
- status=True, |
|
| 70 |
- ).exclude( |
|
| 71 |
- pk__in=deleted_message_ids, |
|
| 72 |
- ) |
|
| 59 |
+ type_messages = system_messages(user_id, SystemMessageInfo.PAIAI_USER) |
|
| 73 | 60 |
else: |
| 74 | 61 |
type_messages = UserMessageInfo.objects.filter( |
| 75 | 62 |
to_uid=user_id, |
@@ -114,7 +101,7 @@ def message_type_read_api(request, msg_type=None): |
||
| 114 | 101 |
if _all == 'true': # 系统消息全部读取 |
| 115 | 102 |
for msg in SystemMessageInfo.objects.filter(src=SystemMessageInfo.PAIAI_USER, status=True): |
| 116 | 103 |
SystemMessageReadInfo.objects.get_or_create(user_id=user_id, msg_id=msg.pk) |
| 117 |
- get_system_message_read_info(user_id) |
|
| 104 |
+ set_system_message_read_info(user_id) |
|
| 118 | 105 |
else: |
| 119 | 106 |
if pk > 0: # 用户(点赞/评论)消息单个读取 |
| 120 | 107 |
UserMessageInfo.objects.filter(pk=pk, to_uid=user_id).update(read=True) |
@@ -15,7 +15,7 @@ from photo.models import PhotosInfo |
||
| 15 | 15 |
from utils.error.errno_utils import GroupPhotoStatusCode, OrderStatusCode, UserStatusCode, WithdrawStatusCode |
| 16 | 16 |
from utils.error.response_utils import response |
| 17 | 17 |
from utils.page_utils import pagination |
| 18 |
-from utils.redis.rkeys import LENSMAN_PHOTO_PRICE |
|
| 18 |
+from utils.redis.rkeys import LENSMAN_PHOTO_PRICE, TODAY_INCOME, TOTAL_INCOME |
|
| 19 | 19 |
from utils.redis.rorder import set_lensman_order_record |
| 20 | 20 |
|
| 21 | 21 |
|
@@ -124,40 +124,48 @@ def order_paid_success(order): |
||
| 124 | 124 |
|
| 125 | 125 |
set_lensman_order_record(porder) |
| 126 | 126 |
|
| 127 |
- if order.to_lid: |
|
| 128 |
- try: |
|
| 129 |
- lensman = LensmanInfo.objects.select_for_update().filter(lensman_id=order.to_lid)[0] |
|
| 130 |
- except IndexError: |
|
| 131 |
- return |
|
| 132 |
- |
|
| 133 |
- lensman.balance += order.total_fee |
|
| 134 |
- lensman.save() |
|
| 135 |
- |
|
| 136 |
- LensmanIncomeExpensesInfo.objects.create( |
|
| 137 |
- lensman_id=order.to_lid, |
|
| 138 |
- photo_id=order.photo_id, |
|
| 139 |
- type=LensmanIncomeExpensesInfo.INCOME, |
|
| 140 |
- amount=order.total_fee, |
|
| 141 |
- balance=lensman.balance, |
|
| 142 |
- remark=u'图片购买', |
|
| 143 |
- ) |
|
| 144 |
- elif order.to_uid: |
|
| 145 |
- try: |
|
| 146 |
- user = UserInfo.objects.select_for_update().filter(user_id=order.to_uid)[0] |
|
| 147 |
- except IndexError: |
|
| 148 |
- return |
|
| 149 |
- |
|
| 150 |
- user.balance += order.total_fee |
|
| 151 |
- user.save() |
|
| 152 |
- |
|
| 153 |
- UserIncomeExpensesInfo.objects.create( |
|
| 154 |
- user_id=order.user_id, |
|
| 155 |
- photo_id=order.photo_id, |
|
| 156 |
- type=UserIncomeExpensesInfo.INCOME, |
|
| 157 |
- amount=order.total_fee, |
|
| 158 |
- balance=user.balance, |
|
| 159 |
- remark=u'图片购买', |
|
| 160 |
- ) |
|
| 127 |
+ # Lensman ==> User |
|
| 128 |
+ # if order.to_lid: |
|
| 129 |
+ # try: |
|
| 130 |
+ # lensman = LensmanInfo.objects.select_for_update().filter(lensman_id=order.to_lid)[0] |
|
| 131 |
+ # except IndexError: |
|
| 132 |
+ # return |
|
| 133 |
+ # |
|
| 134 |
+ # lensman.balance += order.total_fee |
|
| 135 |
+ # lensman.save() |
|
| 136 |
+ # |
|
| 137 |
+ # LensmanIncomeExpensesInfo.objects.create( |
|
| 138 |
+ # lensman_id=order.to_lid, |
|
| 139 |
+ # photo_id=order.photo_id, |
|
| 140 |
+ # type=LensmanIncomeExpensesInfo.INCOME, |
|
| 141 |
+ # amount=order.total_fee, |
|
| 142 |
+ # balance=lensman.balance, |
|
| 143 |
+ # remark=u'图片购买', |
|
| 144 |
+ # ) |
|
| 145 |
+ # elif order.to_uid: |
|
| 146 |
+ |
|
| 147 |
+ to_uid = order.to_uid |
|
| 148 |
+ total_fee = order.total_fee |
|
| 149 |
+ |
|
| 150 |
+ try: |
|
| 151 |
+ user = UserInfo.objects.select_for_update().filter(user_id=to_uid)[0] |
|
| 152 |
+ except IndexError: |
|
| 153 |
+ return |
|
| 154 |
+ |
|
| 155 |
+ user.balance += order.total_fee |
|
| 156 |
+ user.save() |
|
| 157 |
+ |
|
| 158 |
+ r.incr(TOTAL_INCOME % to_uid, total_fee) |
|
| 159 |
+ r.incr(TODAY_INCOME % (to_uid, tc.local_string(format='%Y%m%d')), total_fee) |
|
| 160 |
+ |
|
| 161 |
+ UserIncomeExpensesInfo.objects.create( |
|
| 162 |
+ user_id=to_uid, |
|
| 163 |
+ photo_id=order.photo_id, |
|
| 164 |
+ type=UserIncomeExpensesInfo.INCOME, |
|
| 165 |
+ amount=total_fee, |
|
| 166 |
+ balance=user.balance, |
|
| 167 |
+ remark=u'图片购买', |
|
| 168 |
+ ) |
|
| 161 | 169 |
|
| 162 | 170 |
|
| 163 | 171 |
def order_paid_fail(order): |
@@ -16,4 +16,4 @@ def response_data(status_code, message=None, description=None, data={}):
|
||
| 16 | 16 |
|
| 17 | 17 |
def response(status_code, message=None, description=None, data={}):
|
| 18 | 18 |
message, description = (status_code.message, status_code.description) if isinstance(status_code, StatusCodeField) else (message, description) |
| 19 |
- return JsonResponse(response_data(status_code, message, description, data)) |
|
| 19 |
+ return JsonResponse(response_data(status_code, message, description, data), safe=False) |
@@ -0,0 +1,17 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from message.models import SystemMessageInfo |
|
| 4 |
+from utils.redis.rmessage import get_system_message_delete_info, get_system_message_read_info |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+def system_messages(user_id, src=SystemMessageInfo.PAIAI_USER): |
|
| 8 |
+ """ Not Deleted """ |
|
| 9 |
+ deleted_message_ids = get_system_message_delete_info(user_id) |
|
| 10 |
+ return SystemMessageInfo.objects.filter(src=src, status=True).exclude(pk__in=deleted_message_ids) |
|
| 11 |
+ |
|
| 12 |
+ |
|
| 13 |
+def system_unread_messages(user_id, src): |
|
| 14 |
+ """ Not Deleted & Read """ |
|
| 15 |
+ read_message_ids = get_system_message_read_info(user_id) |
|
| 16 |
+ deleted_message_ids = get_system_message_delete_info(user_id) |
|
| 17 |
+ return SystemMessageInfo.objects.filter(src=src, status=True).exclude(pk__in=list(set(read_message_ids + deleted_message_ids))) |
@@ -30,6 +30,12 @@ LENSMAN_PHOTO_PRICE = 'lensman:photo:price:%s:%s:%s' # STRING,摄影师照片 |
||
| 30 | 30 |
LENSMAN_PHOTO_HAGGLE_TIMES = 'lensman:photo:haggle:times:%s:%s:%s' # STRING,摄影师照片砍价次数,photo_id、user_id、photo_type |
| 31 | 31 |
LENSMAN_PHOTO_ORDER_RECORD = 'lensman:photo:order:record:%s:%s' # STRING,摄影师照片购买记录,photo_id、user_id |
| 32 | 32 |
|
| 33 |
+# 摄影师简报相关 |
|
| 34 |
+TOTAL_INCOME = 'total:income:%s' # STRING,总收入,user_id |
|
| 35 |
+TODAY_INCOME = 'today:income:%s:%s' # STRING,今日收入,user_id、tc.local_string(format='%Y%m%d') |
|
| 36 |
+ |
|
| 37 |
+TODAY_UPLOAD_PHOTO_AMOUNT = 'today:upload:photo:amount:%s:%s' # STRING,今日上传照片数量,user_id、tc.local_string(format='%Y%m%d') |
|
| 38 |
+ |
|
| 33 | 39 |
# 系统消息相关 |
| 34 | 40 |
SYSTEM_MESSAGE_READ_INFO = 'system:message:read:info:%s' # STRING,系统消息读取信息,user_id |
| 35 | 41 |
SYSTEM_MESSAGE_DELETED_INFO = 'system:message:deleted:info:%s' # STRING,系统消息删除信息,user_id |